package com.example.spider.provider.m3u8.task;

import com.example.spider.provider.m3u8.dto.M3u8MetaInfo;
import com.example.spider.task.AbstractSpiderTask;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.util.BitSet;
import java.util.Map;
import java.util.Set;

/**
 * 解析m3u8元数据
 *
 * @author lym
 */
@Getter
@Setter
@Accessors(chain = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, defaultImpl = M3u8MetaInfoParserTask.class)
public class M3u8MetaInfoParserTask extends AbstractSpiderTask<String> {

    private String id;

    private String title;

    /**
     * 源页面地址
     */
    private String source;

    /**
     * 全局唯一定位，确定保存位置与幂等
     * 影片名称
     */
    private String name;

    /**
     * 哪个网页上的视频
     */
    private String sourcePageUrl;

    private M3u8MetaInfo metaInfo;

    /**
     * 去嵌入式广告
     */
    private Set<String> forbiddenPartUrls;

    private Map<String, String> crossSiteHeaders;

    // ----------- handle存储记录使用

    private int recoverCount;

    /**
     * 代表ts是否已经确认下载，最后一位代表是否已经合并
     */
    private BitSet tsPartDownloadStatus;

    private transient M3u8MetaInfo cachedM3u8MetaInfo;

    @Override
    public boolean canRetry() {
        // m3u8 文件不大，不用重试太多次
        return recoverCount < 15;
    }

    @Override
    public boolean supportCluster() {
        return false;
    }
}
